angular.module('com.xbstar.im', [])
/**
 * 用于及时通讯相关的类。
 * 利用websocket协议，实现消息的及时通讯。
 * 涉及的步骤有：
 *  1.注册连接处理类
 *  2.注册消息处理类 
 */
.factory('JFIM', function() {
    var _socket;
    var _url;
    var startAsocket=function(url){
        if (!_socket) {
            _url=url;
            _socket=new WebSocket(url);
        }
        return _socket;
    }
    
    /** 向服务器发送消息
     * @param  {} ws ，websocket对象
     * @param  {} msg 消息，js对象
     */
    ;var sendMsg=function (ws,msg) {
        if (ws.readyState===1) {
            ws.send(JSON.stringify(msg));
        }
        else{
            console.error("连接已被关闭");
        }
        
    }
    return {
        
        /** 注册消息处理方法
         * @param  {} url websocket协议的地址，带头部协议，如："ws://192.168.1.12/sd"
         * @param  {} userid 用于识别此次聊天会话的用户标识符。
         * @param  {} msgHandle 服务器给客户端发送消息时触发的函数。
         */ 
        registIMHandle:function (url,userid,msgHandle) {
            var socket=startAsocket(url);
            //连接服务器，连接成功后发送用户标识
            socket.onopen=function (event) {
                var msg={
                    type:1,
                    uuid:userid,
                }
                sendMsg(socket,msg);
            }
            //注册接收消息
            ;socket.onmessage = function(event) {
                if (event.data.length>0) {
                    var msg=JSON.parse(event.data);
                    msgHandle(msg);
                }
            }
            ;socket.onerror=function (event) {
                console.error("发生了错处："+event);
            }
        }
        
        /**
         * 发送消息给服务器
         * @param  {} msg js对象
         */
        ,sendMsg:function (msg) {
           var ws=startAsocket(_url);
           msg.type=0;
           sendMsg(ws,msg);
        }
    }
});